/**
 * 括号匹配问题
 * 三种括号（）{} []
 * 有一个char[] ，里面存储这些括号，\0 表示结束，看这些括号是否匹配
 */

#include<stdio.h>
#include<stdbool.h>
#include"stack.h"

/**
 * 这里因为stack直接用的int表示，所以将这些括号转为数字
 * () -1 1
 * {} -2 2
 * [] -3 3
 * \0 0
 * 
 */
bool checkBrackets(int arr[]){
    SqStack s;
    initStack(&s);
    int i=0;
    while (arr[i]!=0)
    {
        switch (arr[i])
        {//遇到左括号就直接入栈
        case -1:
            pushStack(&s,-1);
            break;
        case -2:
            pushStack(&s,-2);
            break;
        case -3:
            pushStack(&s,-3);
            break;
        //下面三个是遇到右括号，要判断栈顶原始是否与之匹配的左括号
        case 1:
            int temp;
            getTopStack(s,&temp);
            if(temp!=-1){
                return false;
            }
            break;
        case 2:
            int temp;
            getTopStack(s,&temp);
            if(temp!=-2){
                return false;
            }
            break;
        case 3:
            int temp;
            getTopStack(s,&temp);
            if(temp!=-3){
                return false;
            }
            break;
        default:
            break;
        }
        i++;//下一个元素
    }
    if(stackEmpty(&s)){
        printf("not matched\n");
        return false;
    }else{
        printf("matched \n");
        return true;
    }
    
}